<?php
namespace app\office\controller;

use think\Db;
use think\Cookie;
use think\Controller;
use app\office\model\Navbar as NavbarModel;
use app\office\model\Employee as EmployeeModel;
use app\office\model\ModuleStatic as ModuleStaticModel;

class OfficeBase extends Controller
{
    /**
    // 验证cookie
    */
    public function checkCookie(){
      if(cookie('cookie_text')!=md5(md5(cookie('login_code')).md5(cookie('login_name')))){
        $this->redirect('index/index/index');
      }else{
        // dump("cookie正确");
      }
    }

    /**
    // 引入navbar
    */
    public function setNavbar(){
      $navbar_list=NavbarModel::getTree();
      $this->assign('navbar_list',$navbar_list);
    }

    /**
    // 自动读取数据库编号,并生成新编号
    */
    public function savePic($file){
      $info = $file->validate(['ext' => 'jpg,png'])->move(ROOT_PATH . 'public' . DS . 'uploads');      /* 移动到框架应用根目录/public/uploads/ 目录下 */
        if(!$info){
          return $this->error('只接受上传jpg.png格式文件','create','',2);
        }else{
          return $info->getSaveName();
        }
    }

    /**
    // 自动读取数据库编号,并生成新编号
    */
    public function makeCode($value=''){
      if(empty($value)){
        return "请指定需要生成的编码类型";
      }
      $old_code=Db::name($value)->order('code','desc')->value('code');
      if(empty($old_code)){
        $old_code=1;
      }else{
        //获得符号-的最后一次位置并+1;
        $pos=strrpos($old_code,'-')+1;
        //获取旧编号中数字部分并+1;
        $old_code=substr($old_code,$pos)+1;
      }
      $new_code=date('Y').'-'.str_pad($old_code,6,"0",STR_PAD_LEFT);
      // 根据来源确定返回的类型
      switch ($value) {
        case 'employee':      return str_pad($old_code,4,"0",STR_PAD_LEFT);
        case 'meeting_room':  return 'EMP-'.$new_code;
        case 'organization':  return 'OGA-'.str_pad($old_code,4,"0",STR_PAD_LEFT);
        case 'document':      return 'DOC-'.$new_code;
        case 'position':      return 'POS-'.$new_code;
        case 'meeting':       return 'MET-'.$new_code;
      }
    }

    /**
    // 自动读取数据库编号,并生成新编号,
    */
    public function getDecide($decide,$static){
      switch($decide){
        case  0 : return $static;
        case -1 : return 1;
        // 需要进行判断具体等于多少,来判断转跳至那里,转跳至谁,提交部分!
        case  1 : return $static+1;
        case -5 : return 0;
        default : return false;
      }
    }

    /**
    // 根据$target获取最终筛选的数组,
    */
    public function getFilter($data,$target){
      // 获取目标数组作为键的空数组
      $size=count($target);
      $value=array_fill(0,$size,'');
      $target=array_combine($target,$value);
      // 利用交集获取数据
      $filter=array_intersect_key($data,$target);
      // 利用回调函数去掉空白部分
      $filter=array_filter($filter,function($v){return $v==''?false:true;});
      return $filter;
    }

    /**
    // 根据$target获取最终筛选的数组,
    */
    public function getDateRange($data,$timeRange){
      dump($timeRange[0]."_head");
      if(array_key_exists($timeRange[0]."_head",$data)){
        $result=array();
        dump($data[$timeRange[0]."_head"]);
        dump (1);
        foreach($timeRange as $v){
          $head=$data[$v."_head"]!=''?$data[$v."_head"]:'2000-01-01';
          $end=$data[$v."_tail"]!=''?$data[$v."_tail"]:'2200-01-01';
          $result=array_merge($result,[$v=>['between',$head.','.$end]]);
        }
      }
      if(array_key_exists($timeRange[0],$data)){
        $result=[1,2,3];
      }else{
        $result=array();
      }
      return $result;
    }
    
    // 此段为根据表格module_static中的process_id获取下阶段可操作人选
    public function getNextProcessIdOld($process_id){
      // 获取可操作人选code,
      $process_id=json_decode($process_id);
      // 获取可操作人选信息
      foreach($process_id as $k=>$v){
        $employee=EmployeeModel::getByCode($v);
        $organization=$employee->organization;
        // 获取可操作人选组织机构信息
        foreach($organization as $kk=>$vv){
          $a=array();
          $a['code']=$employee->code;
          $a['title']=$employee->title;
          $temp[$vv->title][]=$a;
        }
      }
      // 调整结果数据结构
      foreach($temp as $kkk=>$vvv){
        $t['depart']=$kkk;
        $t['member']=$vvv;
        $result[]=$t;
      }
      return $result;
    }
    
    //直接通过modulestatic,position,employee,organization获取数据
    public function getNextProcessId($module,$nextStatic){
      // 获取moduleStatic中具体的module和static
      $ModuleStatic=ModuleStaticModel::where('module',$module)->getByStatic($nextStatic)->find();
      // 获取position
      $position=$ModuleStatic->position;
      // 获取employee
      foreach($position as $k=>$pos){
        $employee=$pos->employee;
        // 获取organization
        foreach($employee as $kk=>$emp){
          $organization=$emp->organization;
          foreach($organization as $kkk=>$org){
            $a=array();
            $a['code']=$emp->code;
            $a['title']=$emp->title;
            $temp[$org->title][]=$a;
          }
        }
      }
      // 调整结果数据结构
      foreach($temp as $kkk=>$vvv){
        $t['depart']=$kkk;
        $t['member']=$vvv;
        $result[]=$t;
      }
      return $result;
    }
}

